﻿/*****************************************************
**Copyright(C), 2021-2022, Ciqtek Technology.
**Version:     1.0
**Author:      dingyy
**Date:        2021/08/31
**Description: 
*****************************************************/

#ifndef WIN32FILEDIALOG_H
#define WIN32FILEDIALOG_H

#include "common_global.h"

#include <QObject>
#include <QStringList>
#include <QString>

#include <windows.h>
#include <shlobj.h>
#include <vector>

namespace Common {

	class COMMONSHARED_EXPORT Win32FileDialog
	{
	public:
		/**
		 * @brief  Win32FileDialog
		 * @return
		 */
		Win32FileDialog();

		/**
		 * @brief  ~Win32FileDialog
		 * @return
		 */
		~Win32FileDialog();

	public:
		/**
		 * @brief  openFileDialog 打开文件对话框并选中对应文件（win32）
		 * @param  path 文件路径
		 * @return bool
		 */
		static bool openFileDialog(LPTSTR path);

		/**
		 * @brief  openFileDialog 打开文件对话框并选中对应文件（win32）
		 * @param  path 文件路径
		 * @return bool
		 */
		static bool openFileDialog(QString path);

		/**
		 * @brief  openFileDialogOld 打开文件对话框（COM）
		 * @param  title 对话框标题
		 * @param  filter 过滤项
		 * @param  initDir 默认路径
		 * @param  path 文件路径
		 * @return bool
		 */
		static bool openFileDialogOld(LPTSTR title, LPTSTR filter, LPTSTR initDir, LPTSTR path);

		/**
		 * @brief  openFileDialogOld 打开文件对话框（COM）
		 * @param  title 对话框标题
		 * @param  filter 过滤项
		 * @param  initDir 默认路径
		 * @param  path 文件路径
		 * @return bool
		 */
		static bool openFileDialogOld(QString title, QString filter, QString initDir, QString& path);

		/**
		 * @brief  saveFileDialog 保存文件对话框
		 * @param  title 对话框标题
		 * @param  fileName 文件名
		 * @param  path 传出参数，保存路径
		 * @param  suffix 过滤器
		 * @param  initDir 默认文件夹
		 * @return bool
		 */
		static bool saveFileDialog(LPTSTR title, LPTSTR fileName, LPTSTR path, LPTSTR suffix, LPTSTR initDir = nullptr);

		/**
		 * @brief  saveFileDialog 保存文件对话框
		 * @param  title 对话框标题
		 * @param  fileName 文件名
		 * @param  path 传出参数，保存路径
		 * @param  filter 过滤器
		 * @param  initDir 默认文件夹
		 * @return bool
		 */
		static bool saveFileDialog(QString title, QString fileName, QString &path, QString filter, QString initDir = nullptr);

		/**
		 * @brief  saveFileDialogOld 保存文件对话框
		 * @param  title 对话框标题
		 * @param  filter 过滤器
		 * @param  initDir 默认文件夹
		 * @param  path 传出参数，保存路径
		 * @return bool
		 */
		static bool saveFileDialogOld(LPTSTR title, LPTSTR filter, LPTSTR initDir, LPTSTR path);

		/**
		 * @brief  saveFileDialogOld 保存文件对话框
		 * @param  title 对话框标题
		 * @param  filter 过滤器
		 * @param  initDir 默认文件夹
		 * @param  path 传出参数，保存路径
		 * @return bool
		 */
		static bool saveFileDialogOld(QString title, QString filter, QString initDir, QString& path);

		/**
		 * @brief  openFolderDialog 打开文件夹对话框
		 * @param  title
		 * @param  path
		 * @param  initDir
		 * @return bool
		 */
		static bool openFolderDialog(LPTSTR title, LPTSTR path, LPTSTR initDir = nullptr);

		/**
		 * @brief  openFolderDialog 打开文件夹对话框
		 * @param  title
		 * @param  path
		 * @param  initDir
		 * @return bool
		 */
		static bool openFolderDialog(QString title, QString &path, QString initDir = nullptr);

		/**
		 * @brief  openFolderDialogOld 打开文件夹对话框
		 * @param  title
		 * @param  initDir
		 * @param  path
		 * @return bool
		 */
		static bool openFolderDialogOld(LPTSTR title, LPTSTR initDir, LPTSTR path);

		/**
		 * @brief  openFolderDialogOld 打开文件夹对话框
		 * @param  title
		 * @param  initDir
		 * @param  path
		 * @return bool
		 */
		static bool openFolderDialogOld(QString title, QString initDir, QString& path);

	private:
		/**
		 * @brief  convertFilterFormat 设置COM窗口过滤器字符格式
		 * @param  filter
		 * @return LPTSTR
		 */
		static LPTSTR convertFilterFormat(LPTSTR filter);
	};

}//namespace Common

#endif // WIN32FILEDIALOG_H
